package accion;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import bean.AreaComun;
import bean.Residente;

public class AreaComunAccion {

	private ArrayList<AreaComun> listaAreaComun = new ArrayList<AreaComun>();
	private String rutaAreaComun="c:/BD/areacomun.txt";

	public ArrayList<AreaComun> inicializarTablaAreaComun() {

		FileReader fr = null;
		BufferedReader br = null;

		try {
			fr = new FileReader(rutaAreaComun);
			br = new BufferedReader(fr);

			String linea;
			AreaComun areacomun = null;
			while ((linea = br.readLine()) != null) {
				String[] datos = linea.split("#");
				areacomun = new AreaComun(datos[0], datos[1], datos[2],
						Integer.parseInt(datos[3]), datos[4], datos[5]);
				listaAreaComun.add(areacomun);
			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		} finally {

			try {
				if (null != fr) {
					fr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

		return listaAreaComun;
	}

	public boolean existeAreaComun(AreaComun areacomun) {

		boolean existeAreaComun = false;

		for (AreaComun areacomunDeLista:listaAreaComun) {
			if (areacomunDeLista.getCodigo().equals(areacomun.getCodigo())
					){
				//			|| areacomunDeLista.getTipo().equals(areacomun.getTipo())) {
				existeAreaComun = true;
			}
		}

		return existeAreaComun;
	}

	public int actualizarAreaComun(AreaComun areacomun){
		int actualizacion = 0;
		int indiceDeLista = -1;
		int indiceaEliminarDeLista = 0;

		for (AreaComun areaComunLista : listaAreaComun) {
			indiceDeLista++;
			if (areaComunLista.getTipo().equals(areacomun.getTipo())) {
				indiceaEliminarDeLista = indiceDeLista;
				actualizacion = 1;
			}
		}

		listaAreaComun.remove(indiceaEliminarDeLista);
		listaAreaComun.add(indiceaEliminarDeLista, areacomun);
		actualizarTablaAreaComun();

		return actualizacion;
	}

	public void actualizarTablaAreaComun() {
		try{
			PrintWriter pw= new PrintWriter(new FileWriter(rutaAreaComun));

			for(AreaComun areacomunDeLista:listaAreaComun){
				pw.println(areacomunDeLista.getCodigo() + "#"
						+ areacomunDeLista.getTipo() + "#"
						+ areacomunDeLista.getUbicacion() + "#"
						+ areacomunDeLista.getCapacidadPersonas() + "#" 
						+ areacomunDeLista.getEstado()+ "#" 
						+ areacomunDeLista.getDescripcion() + "#");
			}
			pw.close();
		}
		catch(Exception ex){

		}
	}	


	public int ingresarAreaComun(AreaComun areacomun) {

		int ingreso = 0;

		if (existeAreaComun(areacomun) == false) {
			listaAreaComun.add(areacomun);
			ingreso=1;
		}
		actualizarTablaAreaComun();
		return ingreso;
	}	

	public AreaComun obtenerAreaComun(AreaComun areacomun) {

		AreaComun areacomunObtenido = null;

		for (AreaComun areacomunDeLista : listaAreaComun) {
			if (areacomunDeLista.getCodigo().equals(areacomun.getCodigo())) {
				areacomunObtenido = areacomunDeLista;
			}
		}
		return areacomunObtenido;
	}

	public ArrayList<AreaComun> listarAreasComunes (){

		ArrayList<AreaComun> listaAreasDisponibles = new ArrayList<AreaComun>();

		System.out.println(" Listado de Areas Comunes por Estado Disponible ");
		System.out.println("================================================");
		for (AreaComun areaDeLista:listaAreaComun) {
			if (areaDeLista.getEstado().equals("DISPONIBLE")){
				listaAreasDisponibles.add(areaDeLista);
				System.out.println(areaDeLista.getTipo()+" ubicado en el "+areaDeLista.getUbicacion() +", Con capacidad para "+areaDeLista.getCapacidadPersonas()+" personas. Estado: "+ areaDeLista.getEstado());
			}
		}	
		return listaAreasDisponibles;
	}

	public ArrayList<AreaComun> listarAreasComunesGeneral (){

		ArrayList<AreaComun> listaAreasGeneral = new ArrayList<AreaComun>();

		System.out.println(" Listado General Areas Comunes ");
		System.out.println("================================");
		for (AreaComun areaDeLista:listaAreaComun) {
			listaAreasGeneral.add(areaDeLista);
			System.out.println(areaDeLista.getTipo()+" ubicado en el "+areaDeLista.getUbicacion() +", Con capacidad para "+areaDeLista.getCapacidadPersonas()+" personas. Estado: "+ areaDeLista.getEstado());
		}

		System.out.println("Total Registros: "+listaAreasGeneral.size());
		return listaAreasGeneral;
	}
}

